package com.flink.hbase.sql2hdfs.udf;

import org.apache.flink.table.functions.ScalarFunction;

/**
 * 用户等级计算UDF
 * 根据年龄、薪资、部门等因素综合计算用户等级
 */
public class UserLevelUDF extends ScalarFunction {
    private static final long serialVersionUID = 1L;
    
    /**
     * 计算用户等级
     * @param age 年龄
     * @param salary 薪资
     * @param department 部门
     * @param position 职位
     * @return 用户等级
     */
    public String eval(Integer age, Double salary, String department, String position) {
        if (age == null && salary == null) {
            return "未知";
        }
        
        int score = 0;
        
        // 年龄评分
        if (age != null) {
            if (age >= 25 && age <= 45) {
                score += 2; // 工作黄金年龄
            } else if (age > 18 && age < 60) {
                score += 1;
            }
        }
        
        // 薪资评分
        if (salary != null) {
            if (salary >= 20000) {
                score += 3; // 高薪
            } else if (salary >= 10000) {
                score += 2; // 中等薪资
            } else if (salary >= 5000) {
                score += 1; // 一般薪资
            }
        }
        
        // 部门评分
        if (department != null) {
            String dept = department.toLowerCase();
            if (dept.contains("技术") || dept.contains("研发") || dept.contains("开发")) {
                score += 1; // 技术部门加分
            } else if (dept.contains("管理") || dept.contains("总监") || dept.contains("领导")) {
                score += 2; // 管理层加分
            }
        }
        
        // 职位评分
        if (position != null) {
            String pos = position.toLowerCase();
            if (pos.contains("总监") || pos.contains("经理") || pos.contains("主管")) {
                score += 2; // 管理职位加分
            } else if (pos.contains("专家") || pos.contains("架构师") || pos.contains("高级")) {
                score += 1; // 专业职位加分
            }
        }
        
        // 根据总分确定等级
        if (score >= 6) {
            return "钻石用户";
        } else if (score >= 4) {
            return "VIP用户";
        } else if (score >= 2) {
            return "高级用户";
        } else if (score >= 1) {
            return "普通用户";
        } else {
            return "初级用户";
        }
    }
    
    /**
     * 简化版本：仅根据年龄和薪资计算
     */
    public String eval(Integer age, Double salary) {
        return eval(age, salary, null, null);
    }
    
    /**
     * 最简版本：仅根据薪资计算
     */
    public String eval(Double salary) {
        return eval(null, salary, null, null);
    }
} 